package web

import (
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"net/http"
)

type Result struct {
	// 这个叫做业务错误码
	Code int    `json:"code"`
	Msg  string `json:"msg"`
	Data any    `json:"data"`
}

func WrapReq[T any](ctx *gin.Context, fn func(ctx *gin.Context, req T) Result) {
	var req T
	err := ctx.Bind(&req)
	if err != nil {
		zap.L().Error("Bind失败", zap.Error(err))
		ctx.JSON(http.StatusOK, Result{
			Code: 5,
			Msg:  "参数错误",
		})
		return
	}

	res := fn(ctx, req)
	ctx.JSON(http.StatusOK, res)
}
